//https://pintia.cn/problem-sets/1574060137151397888/exam/problems/1574060247893606401
//dp
//i为前n个，j为前i-1个取多少个
#include<bits/stdc++.h>
using namespace std;
int main(){
    long long n,dp[105][105]={0},a[105]={0};
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    for(int i=1;i<=n;i++){
        dp[i][1]=(a[i]-a[1])*(a[i]-a[1]);
    }
    for(int i=1;i<=n;i++){
        for(int j=2;j<i;j++){
            for(int k=j;k<i;k++){
                dp[i][j]=max(dp[i][j],dp[k][j-1]+(a[i]-a[k])*(a[i]-a[k]));//k为第j个所取位置，取k时已经取完j-1个，即从第j个开始枚举找到最大
            }
        }
    }
    for(int i=1;i<=n;i++){
        if(i*2>n-2) cout<<dp[n][1]<<endl;//如果已经可以取完2到n-1所有数，直接只取首尾
        else cout<<dp[n][n-2*i-1]<<endl;//否则输出取第n个，前n-1个取n-1-2*i的最大值
    }
    
} 